//package com.tsk.admin.arthas.cluster;
//
//import com.alibaba.arthas.tunnel.server.AgentClusterInfo;
//import com.tsk.admin.arthas.AgentClusterInfo;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.cache.Cache;
//import org.springframework.cache.Cache.ValueWrapper;
//import org.springframework.cache.caffeine.CaffeineCache;
//
//import java.util.Collection;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Map.Entry;
//import java.util.concurrent.ConcurrentMap;
//import java.util.concurrent.TimeUnit;
//
///**
// *
// * @author hengyunabc 2020-12-02
// *
// */
//public class InMemoryClusterStore implements TunnelClusterStore {
//    private final static Logger logger = LoggerFactory.getLogger(InMemoryClusterStore.class);
//
//    private Cache cache;
//
//    @Override
//    public AgentClusterInfo findAgent(String agentId) {
//
//        ValueWrapper valueWrapper = cache.get(agentId);
//        if (valueWrapper == null) {
//            return null;
//        }
//
//        AgentClusterInfo info = (AgentClusterInfo) valueWrapper.get();
//        return info;
//    }
//
//    @Override
//    public void removeAgent(String agentId) {
//        cache.evict(agentId);
//    }
//
//    @Override
//    public void addAgent(String agentId, AgentClusterInfo info, long timeout, TimeUnit timeUnit) {
//        cache.put(agentId, info);
//    }
//
//    @Override
//    public Collection<String> allAgentIds() {
//        CaffeineCache caffeineCache = (CaffeineCache) cache;
//        com.github.benmanes.caffeine.cache.Cache<Object, Object> nativeCache = caffeineCache.getNativeCache();
//        return (Collection<String>) (Collection<?>) nativeCache.asMap().keySet();
//    }
//
//    @Override
//    public Map<String, AgentClusterInfo> agentInfo(String appName) {
//        CaffeineCache caffeineCache = (CaffeineCache) cache;
//        com.github.benmanes.caffeine.cache.Cache<Object, Object> nativeCache = caffeineCache.getNativeCache();
//
//        ConcurrentMap<String, AgentClusterInfo> map = (ConcurrentMap<String, AgentClusterInfo>) (ConcurrentMap<?, ?>) nativeCache
//                .asMap();
//
//        Map<String, AgentClusterInfo> result = new HashMap<String, AgentClusterInfo>();
//
//        String prefix = appName + "_";
//        for (Entry<String, AgentClusterInfo> entry : map.entrySet()) {
//            String agentId = entry.getKey();
//            if (agentId.startsWith(prefix)) {
//                result.put(agentId, entry.getValue());
//            }
//        }
//
//        return result;
//
//    }
//
//    public Cache getCache() {
//        return cache;
//    }
//
//    public void setCache(Cache cache) {
//        this.cache = cache;
//    }
//
//}
